package DesignPattern.StrategyPattern;

import java.util.HashMap;
import java.util.Map;
/**
 * 在策略模式（Strategy Pattern）中一个类的行为或其算法可以在运行时更改。
 * 策略对象改变 context 对象的执行算法。
 * 优点： 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。
 *
 * 缺点： 1、策略类会增多。 2、所有策略类都需要对外暴露。
 * */
public class Client {
    public static void main(String[] args) {

        Opt addOpt = new AddOpt();
        Opt divideOpt = new DivideOpt();

        // 手动创建 OptStrategyContext，并传入策略映射
        Map<String, Opt> strategyMap = new HashMap<>();
        strategyMap.put("add", addOpt);
        strategyMap.put("divide", divideOpt);

        OptStrategyContext context = new OptStrategyContext(strategyMap);

        // 使用策略
        int resultAdd = context.apply("add", 5, 3);
        int resultDivide = context.apply("divide", 10, 2);

        System.out.println("Result Add: " + resultAdd);
        System.out.println("Result Divide: " + resultDivide);
    }
}
